package com.xxc.batis.ext

import com.github.pagehelper.Page
import com.github.pagehelper.PageHelper
import com.xxc.batis.qo.PageQO
import com.xxc.batis.vo.PageVO

/**
 * @param R 结果类型
 * @param V 视图对象类型
 */
fun <R,V> startPage(pageQO: PageQO<*>):((R)->V)->PageVO<V> {
    // 当没有排序字段时不排序
    val page = if(pageQO.orderBy == null)
        PageHelper.startPage<R>(pageQO.curPage,pageQO.pageSize)
    else
    {
        if (!pageQO.isAsc) {
            pageQO.orderBy += " desc"
        }
        PageHelper.startPage<R>(pageQO.curPage,pageQO.pageSize,pageQO.orderBy)
    }
    // 转换函数
    return fun (convert) = page.toVO(convert)
}



/**
 * 将查出来的实体转化为VO
 */
fun <T,R> Page<T>.toVO(convert:(T)->R):PageVO<R>{
    return PageVO(this.result.map {
        convert(it)
    },this.total,this.pageNum,this.pages,this.pageSize,this.pageNum == this.pages,this.pageNum == 1)
}